/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package familytree.negocio;

import familytree.exception.FileSizeTooLongException;
import familytree.persistencia.pojos.Album;
import familytree.persistencia.pojos.Imagen;
import familytree.persistencia.pojos.Nodo;
import familytree.persistencia.pojos.Usuario;
import java.io.File;
import java.util.List;
import java.util.Map;
import java.util.Set;

/**
 *
 * @author Antonio
 */
public interface IAlbumProcessor {

    
    /**
     Devuelve un album con las imagenes de la base de datos pasadas a File
     * @param album Album que contiene los archivos Blob de la base de datos
     * @param  ruta Dirección en la que se crearán los ficheros del álbum
     * @return Album con las imágenes creadas
     */
    Album createImagenes(Album album, String ruta);

    
    /**
     Indica si existe un álbum con ese nombre dentro de la familia del nodo con 
     * ese nombre.
     *  @param nombre Nombre del álbum.
     *  @param nodo Miembro de la familia en la que se buscará el álbum.
     *  @return true si existe el álbum en la familia.
     */
    public boolean existeAlbum(String nombre, Nodo nodo);

    
    /**
     * Obtiene un álbum dado un nombre y una familia.
     * @param nombreAlbum Nombre del álbum.
     * @param nodo Nodo de la familia en la que se buscará el álbum.
     */
    Album getAlbum(String nombreAlbum, Nodo nodo);

    /**
     * Obtiene todos los álbumes de una familia.
     * @param nodo Nodo en cuya familia se buscará los álbumes.
     */
    List<Album> getAlbumes(Nodo nodo);

    
    /**
     * Inserta en la base de datos una imagen.
     * @param arrayImagen Array con los datos de la imagen.
     * @param nombreArchivo Nombre del archivo insertado.
     * @param nombre Nombre que el usuario le ha dado a la imagen.
     * @param nodo Nodo en cuya familia se añadirá la imagen.
     * @param usuario Usuario que inserta la imagen.
     * @param nombreAlbum Nombre del álbum al que se le añade la imagen.
     * @return Álbum con la imagen añadida.
     * @throws FileSizeTooLongException Si el tamaño del array es demasiado 
     * grande.
     */
    Album insertImagen(byte[] arrayImagen, String nombreArchivo, String nombre, 
            Nodo nodo, Usuario usuario, String nombreAlbum) 
            throws FileSizeTooLongException;

    
    /**
     Inserta un nuevo Album en la BD.
     * @param album Album que se va a insertar.
     * @param usuario Usuario que añade el álbum.
     */
    void insertaAlbum(Album album, Usuario usuario);
    
    /**
     * Obtiene la primera imagen del album.
     * @param album Album del que se obtendrá la imagen.
     * @param Dirección en la que se creará la imagen.
     * @return Fichero con la primera imagen del álbum.
     */
    public File getImagenPortada(Album album,String ruta); 
    
    
    /**
     *Devuelve las primeras imagenes de los albumes de la familia del Nodo
     * @param nodo Nodo de cuya familia se obtendrán las fotos.
     * @param ruta 
     * @return Map con los nombres de los albumes y su primera imagen
     */
    public Map<String,File> getImagenesPortadas(Nodo nodo, String ruta);
    
    
     public List<Imagen> listaImagenes(Set<Imagen> imagenes);
}
